package qq

import (
	"github.com/crozz-net/gopenapi/qq/model/t"
	"github.com/crozz-net/gopenapi/request"
	"io"
	"net/url"
)

type api_t struct {
	client_id string
}

/**
 * 发表一条微博信息（纯文本）到腾讯微博平台上。<br/>
 * 注意连续两次发布的微博内容不可以重复。
 * 文档地址：http://wiki.connect.qq.com/add_t
 *
 * @param access_token   可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid         用户的ID，与QQ号码一一对应。
 * @param content        表示要发表的微博内容。必须为UTF-8编码，最长为140个汉字，也就是420字节。
 *                       如果微博内容中有URL，后台会自动将该URL转换为短URL，每个URL折算成11个字节。
 *                       若在此处@好友，需正确填写好友的微博账号，而非昵称。
 * @param clientip       用户ip。
 *                       必须正确填写用户侧真实ip，不能为内网ip及以127或255开头的ip，以分析用户所在地。
 * @param longitude      用户所在地理位置的经度。
 *                       为实数，最多支持10位有效数字。有效范围：-180.0到+180.0，+表示东经，默认为0.0。
 * @param latitude       用户所在地理位置的纬度。
 *                       为实数，最多支持10位有效数字。有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
 * @param compatibleflag 容错标志，支持按位操作，默认为0。
 *                       0x20：微博内容长度超过140字则报错；
 *                       0：以上错误均做容错处理，即发表普通微博。
 */
func (this *api_t) Add_t(access_token, openid, content, clientip, longitude, latitude, compatibleflag string) (*t.Resp_add_t, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("content", content)
	param.Add("clientip", clientip)
	param.Add("longitude", longitude)
	param.Add("latitude", latitude)
	param.Add("compatibleflag", compatibleflag)

	obj := &t.Resp_add_t{}
	err := request.HttpPostAsObj(BASE_URL+"t/add_t", param, obj)

	return obj, err
}

/**
 * 根据微博ID删除指定微博。<br/>
 * 文档地址：http://wiki.connect.qq.com/del_t
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param id           {@link Resp_add_t.Data#id 微博消息的id}
 */
func (this *api_t) Del_t(access_token, openid, id string) (*t.Resp_del_t, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("id", id)

	obj := &t.Resp_del_t{}
	err := request.HttpPostAsObj(BASE_URL+"t/del_t", param, obj)

	return obj, err
}

/**
 * 上传一张图片，并发布一条消息到腾讯微博平台上。
 * 文档地址：http://wiki.connect.qq.com/add_pic_t
 *
 * @param access_token   可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid         用户的ID，与QQ号码一一对应。
 * @param content        表示要发表的微博内容。必须为UTF-8编码，最长为140个汉字，也就是420字节。
 *                       如果微博内容中有URL，后台会自动将该URL转换为短URL，每个URL折算成11个字节。
 *                       若在此处@好友，需正确填写好友的微博账号，而非昵称。
 * @param clientip       用户ip。
 *                       必须正确填写用户侧真实ip，不能为内网ip及以127或255开头的ip，以分析用户所在地。
 * @param longitude      用户所在地理位置的经度。
 *                       为实数，最多支持10位有效数字。有效范围：-180.0到+180.0，+表示东经，默认为0.0。
 * @param latitude       用户所在地理位置的纬度。
 *                       为实数，最多支持10位有效数字。有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
 * @param compatibleflag 容错标志，支持按位操作，默认为0。
 *                       0x20：微博内容长度超过140字则报错；
 *                       0：以上错误均做容错处理，即发表普通微博。
 * @param pic            要上传的图片
 *                       图片仅支持gif、jpeg、jpg、png、bmp及ico格式（所有图片都会重新压缩，gif被重新压缩后不会再有动画效果）
 *                       图片size小于4M。
 */
func (this *api_t) Add_pic_t(access_token, openid, content, clientip, longitude, latitude, compatibleflag string, file io.Reader) (*t.Resp_add_pic_t, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("content", content)
	param.Add("clientip", clientip)
	param.Add("longitude", longitude)
	param.Add("latitude", latitude)
	param.Add("compatibleflag", compatibleflag)

	obj := &t.Resp_add_pic_t{}
	err := request.HttpMultipartAsObj(BASE_URL+"t/add_pic_t", param, "pic", "pic.jpg", file, obj)

	return obj, err
}

/**
 * 获取一条微博的转播或评论信息列表。
 * 文档地址：http://wiki.connect.qq.com/get_repost_list
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param rootid       转发或点评的源微博的ID。
 * @param flag         标识获取的是转播列表还是点评列表。0：获取转播列表；1：获取点评列表；2：转播列表和点评列表都获取。
 * @param pageflag     分页标识。0：第一页；1：向下翻页；2：向上翻页。
 * @param pagetime     本页起始时间。
 *                     第一页：0；
 *                     向下翻页：上一次请求返回的最后一条记录时间；
 *                     向上翻页：上一次请求返回的第一条记录的时间。
 * @param reqnum       每次请求记录的条数。取值为1-100条。
 * @param twitterid    翻页时使用。第1-100条：0；继续向下翻页：上一次请求返回的最后一条记录id。
 */
func (this *api_t) Get_repost_list(access_token, openid, rootid, flag, pageflag, pagetime, reqnum, twitterid string) (*t.Resp_get_repost_list, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("rootid", rootid)
	param.Add("flag", flag)
	param.Add("pageflag", pageflag)
	param.Add("pagetime", pagetime)
	param.Add("reqnum", reqnum)
	param.Add("twitterid", twitterid)

	obj := &t.Resp_get_repost_list{}
	err := request.HttpGetAsObj(BASE_URL+"t/get_repost_list", param, obj)

	return obj, err
}
